//引入express模块
const express = require('express');
// 加载bodyParser模块
const bodyParser = require('body-parser');
// 引入用户路由器
const userRouter = require('./router/user.js');
// 引入商品路由器
const goodsRouter = require('./router/goods.js');
// 引入地址路由
const addrRouter = require('./router/address.js');
// 引入订单路由
const orderRouter = require('./router/order.js');
// 引入相关路由
const aboutRouter = require('./router/about.js');
//引入token模块
const jwt = require("./jwt.js")
//创建WEB服务器
const app = express();

// 加载cors模块  跨域
const cors = require('cors');
// 使用cors中间件
app.use(cors({
  origin: ['http://localhost:8080', 'http://127.0.0.1:8080']
}));

// 安装配置session  npm i express-session --save
const session = require('express-session');
// 引入connect-mongo模块（将session写入数据库，持久化）
// const MongoStore = require('connect-mongo')(session);
// 使用session中间件
app.use(session({
  name: 'userid',//返回给客户端cookie的key，不写 默认值是；connect.lid
  secret: '12345',//参与加密的字符串（又称签名）
  saveUninitialized: false,//是否再存储内容之前创建session
  resave: true,
  // store: new MongoStore({
  //   url: 'mongodb://localhost:27017/sessions_container',
  //   toucheAfter:24*3600//修改频率
  // }),
  cookie: {
    httpOnly: true,//开启后前端无法啊通过JS操作cookie
    maxAge: 1000 * 30//cookie过期时间
  }
}));

// 托管静态资源到public目录下
app.use(express.static('public'));

// 使用body-parser中间件
app.use(bodyParser.urlencoded({ extended: false }));
var token = "";
// 配置token
app.use((req, res, next) => {
  if (req.url != '/user/login' && (req.url.startsWith('/user') || req.url.startsWith("/order") || req.url.startsWith("/addr"))
  ) {
    let token = req.headers.token;//拿到请求头中的token参数值
    console.log("进入token拦截")
    let result = jwt.verifyToken(token);//解密
    // 如果考验通过就next,否则就返回登录信息不正确
    if (result === undefined) {
      console.log(1)
      res.send({
        code: 403,
        msg: "未登录"
      })
    } else if (result.name == 'TokenExpiredError') {
      console.log(2)
      res.send({
        code: 403,
        msg: "登录超时，请重新登录"
      })
    } else if (result.name == "JsonWebTokenError") {
      console.log(3)
      res.send({
        code: 403,
        msg: "未知错误"
      })
    } else {
      next();
    }
  } else {
    next();
  }
})
// 传出req.body

// 错误处理中间件
app.use((err, req, res, next) => {
  res.send({
    code: 500,
    msg: '服务器未知错误'
  })
})
// 添加前缀
app.use('/user', userRouter);
app.use('/goods', goodsRouter);
app.use('/addr', addrRouter);
app.use('/order', orderRouter);
app.use('/about', aboutRouter);
// 指定服务器对象监听的端口号
app.listen(3000, () => {
  console.log('server is running...');
});